package br.com.velp.sudecap.serviceimpl;

import br.com.velp.sudecap.dao.CartorioDAO;
import br.com.velp.sudecap.dao.CidadeDAO;
import br.com.velp.sudecap.dto.CartorioParametrosConsultaDTO;
import br.com.velp.sudecap.entidade.Cartorio;
import br.com.velp.sudecap.entidade.Cidade;
import br.com.velp.sudecap.service.CartorioService;
import java.util.List;
import org.hibernate.criterion.Order;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

/**
 * <sumario>
 * <objetivo> "Rastreabilidade" </objetivo>
 * <autor> EDUARDO SANTOS DE OLIVEIRA </autor>
 * <versao>1.0.0.0</versao>
 * <data_criacao> 17.10.2012 </data_criacao>
 * <data_ultima_alteracao> N/A </data_ultima_alteracao>
 * <requisitos_afetados> RF008.01 - Listar Cartórios / RF008.02 - Cadastrar Cartorio </requisitos_afetados>
 * <descricao> Implementação da Interface Responsável Pelas Operações de 
 *             CRUD Referentes ao Contexto de Cartório </descricao>
 * </sumario>
 */
@Service("cartorioService")
@Transactional(readOnly = true)
@Scope(ConfigurableBeanFactory.SCOPE_SINGLETON)
public class CartorioServiceImpl implements CartorioService{
    
    public static final Long serialVersionUID = 1L;
    
    @Autowired
    private CartorioDAO cartorioDAO;
    
    @Autowired
    private CidadeDAO cidadeDAO;
    
    @Transactional(readOnly = false)
    @Override
    public Long salvar(Cartorio cartorio){
	return this.cartorioDAO.salvar(cartorio);
    }
    
    @Transactional(readOnly = false)
    @Override
    public void atualizar(Cartorio cartorio){
	this.cartorioDAO.atualizar(cartorio);
    }
    
    @Transactional(readOnly = false)
    @Override
    public void excluir(Cartorio cartorio){
	this.cartorioDAO.excluir(cartorio);
    }
    
    @Override
    public Cartorio obterPorId(Long idCartorio){
	return this.cartorioDAO.obterPorId(idCartorio);
    }

    @Override
    public int contarCartorios(CartorioParametrosConsultaDTO parametros){
	return this.cartorioDAO.contarCartorios(parametros);
    }
    
    @Override
    public List<Cartorio> buscarCartoriosPaginados(int firstResult, int maxResults, 
	    CartorioParametrosConsultaDTO parametros, Order order){
	return this.cartorioDAO.buscarCartoriosPaginados(firstResult, maxResults, parametros, order);
    }
    
    @Override
    public List<String> recuperarTodosEstados(){
	return this.cidadeDAO.recuperarTodosEstados();
    }
    
    @Override
    public List<Cidade> recuperarMunicipiosPorEstado(String siglaEstado){
	return this.cidadeDAO.recuperarMunicipiosPorEstado(siglaEstado);
    }
    
}
